home *** CD-ROM | disk | FTP | other *** search
/ Aminet 8 / Aminet 8 (1995)(GTI - Schatztruhe)[!][Oct 1995].iso / Aminet / disk / cdrom / MCDPlay.lha / MCDPlayer / Source / Proglist.c < prev    next >
C/C++ Source or Header  |  1994-12-22  |  15KB  |  438 lines

  1. #include <intuition/intuition.h>
  2. #include <intuition/gadgetclass.h>
  3. #include <libraries/gadtools.h>
  4. #include <graphics/displayinfo.h>
  5. #include <graphics/gfxbase.h>
  6. #include <clib/gadtools_protos.h>
  7. #include <string.h>
  8. #include "mcdplayer.h"
  9.  
  10. #define GD_ProgTitelliste                      0
  11. #define GD_ProgSave                            1
  12. #define GD_ProgAbbruch                         2
  13. #define GD_ProgBenutzen                        3
  14. #define GD_ProgProgliste                       4
  15. #define GD_ProgNeu                             5
  16. #define GD_ProgEditMode                        6
  17. #define GD_ProgEditNum                         7
  18.  
  19. APTR                  VisualInfo = NULL;
  20. struct Screen        *Scr;
  21. struct Window        *ProgWnd = NULL;
  22. struct Gadget        *ProgGList = NULL;
  23. struct Gadget        *ProgGadgets[8];
  24. WORD                  ProgLeft;
  25. WORD                  ProgTop;
  26. UWORD                 ProgWidth = 469;
  27. UWORD                 ProgHeight = 174;
  28. UBYTE                *ProgWdt = (UBYTE *)"Titelliste";
  29.  
  30. struct List           SongList;
  31. struct Node           SongNode[100];
  32. struct List           PrgList;
  33. struct Node           PrgNode[100];
  34. char                 *SongTitles;
  35.  
  36. int                   ProgLen = 0;
  37. int                   ProgPos = 0;
  38. int                   ProgNr = 0;
  39. int                   ProgEditMode = 0;
  40.  
  41. BYTE                  Program[100][9];
  42. BYTE                  TempProg[100][9];
  43.  
  44. UBYTE         *ProgEditModeLabels[] = {
  45.     (UBYTE *)"Lösch",
  46.     (UBYTE *)"/\\",
  47.     (UBYTE *)"\\/",
  48.     (UBYTE *)"Oben",
  49.     (UBYTE *)"Unten",
  50.     NULL };
  51.  
  52. UBYTE         *ProgEditNumLabels[] = {
  53.     (UBYTE *)"Start",
  54.     (UBYTE *)"Prog 1",
  55.     (UBYTE *)"Prog 2",
  56.     (UBYTE *)"Prog 3",
  57.     (UBYTE *)"Prog 4",
  58.     (UBYTE *)"Prog 5",
  59.     (UBYTE *)"Prog 6",
  60.     (UBYTE *)"Prog 7",
  61.     (UBYTE *)"Prog 8",
  62.     NULL };
  63.  
  64. struct TextAttr topaz8 = {
  65.     ( STRPTR )"topaz.font", 8, 0x00, 0x41 };
  66.  
  67. void MakePrgList( int Nr )
  68.     {
  69.     int i;
  70.  
  71.     NewList( &PrgList );
  72.     i = 0;
  73.     while( TempProg[i][Nr] )
  74.         {
  75.         PrgNode[i].ln_Name = SongNode[TempProg[i][Nr]-1].ln_Name;
  76.         PrgNode[i].ln_Pri  = TempProg[i][Nr];
  77.         AddTail( &PrgList, &PrgNode[i] );
  78.         i++;
  79.         };
  80.     ProgLen = i;
  81.     ProgNr = Nr;
  82.     };
  83.  
  84. void GetProgram( void )
  85.     {
  86.     char Buffer[256];
  87.     BPTR FH;
  88.     int i;
  89.  
  90.     sprintf( Buffer, SongPath );
  91.     AddPart( Buffer, TOC_CDID, 130 );
  92.     Buffer[strlen(Buffer)-16] = 'p';
  93.     Buffer[strlen(Buffer)-15] = 'r';
  94.  
  95.     if (FH = Open( Buffer, MODE_OLDFILE ))
  96.         {
  97.         Read( FH, Program, 900 );
  98.         Close( FH );
  99.         }
  100.     else
  101.         {
  102.         for( i=0; i<=8; i++ ) Program[0][i] = 0;
  103.         };
  104.     }
  105.  
  106. void InitLists( void )
  107.     {
  108.     int i;
  109.  
  110.     if (SongTitles = AllocMem( 10000, MEMF_ANY|MEMF_CLEAR ))
  111.         {
  112.         NewList( &SongList );
  113.         for( i=0; i<TOC_NumTracks; i++ )
  114.             {
  115.             SongNode[i].ln_Name = &(SongTitles[i*100]);
  116.             sprintf( &(SongTitles[i*100]), "%02d: ", i+1 );
  117.             strcpy( &(SongTitles[i*100+4]), TOC_Title[i] );
  118.             AddTail( &SongList, &SongNode[i] );
  119.             };
  120.         memcpy( TempProg, Program, 900 );
  121.         MakePrgList( 0 );
  122.         }
  123.     }
  124.  
  125. void ExitLists( int Action ) /* 0=Exit, 1=Use, 2=Save */
  126.     {
  127.     char Buffer[256];
  128.     BPTR FH;
  129.  
  130.     if (Action)
  131.         {
  132.         memcpy( Program, TempProg, 900 );
  133.         }
  134.         
  135.     if (Action==2)
  136.         {
  137.         sprintf( Buffer, SongPath );
  138.         AddPart( Buffer, TOC_CDID, 130 );
  139.         Buffer[strlen(Buffer)-16] = 'p';
  140.         Buffer[strlen(Buffer)-15] = 'r';
  141.  
  142.         if (FH = Open( Buffer, MODE_NEWFILE ))
  143.             {
  144.             Write( FH, Program, 900 );
  145.             Close( FH );
  146.             }
  147.         }
  148.  
  149.     if (SongTitles) FreeMem( SongTitles, 10000 );
  150.     }
  151.  
  152. int OpenProgWindow( void )
  153. {
  154.     struct NewGadget     ng;
  155.     struct Gadget       *g;
  156.     UWORD               offx, offy;
  157.  
  158.     if ( ! ( Scr = LockPubScreen( 0 )))
  159.         return( 1L );
  160.  
  161.     PlaceWnd( Scr, ProgWidth, ProgHeight + offy, &ProgLeft, &ProgTop, 0 );
  162.  
  163.     if ( ! ( VisualInfo = GetVisualInfo( Scr, TAG_DONE )))
  164.         return( 2L );
  165.  
  166.     offx = Scr->WBorLeft;
  167.     offy = Scr->WBorTop + Scr->RastPort.TxHeight + 1;
  168.  
  169.     if ( ! ( g = CreateContext( &ProgGList )))
  170.         return( 1L );
  171.  
  172.     ng.ng_LeftEdge        =    offx + 5;
  173.     ng.ng_TopEdge         =    offy + 19;
  174.     ng.ng_Width           =    181;
  175.     ng.ng_Height          =    128;
  176.     ng.ng_GadgetText      =    (UBYTE *)"Titelliste";
  177.     ng.ng_TextAttr        =    &topaz8;
  178.     ng.ng_GadgetID        =    GD_ProgTitelliste;
  179.     ng.ng_Flags           =    PLACETEXT_ABOVE;
  180.     ng.ng_VisualInfo      =    VisualInfo;
  181.  
  182.     g = CreateGadget( LISTVIEW_KIND, g, &ng, GTLV_Labels, &SongList, GTLV_ShowSelected, NULL, TAG_DONE );
  183.  
  184.     ProgGadgets[ 0 ] = g;
  185.  
  186.     ng.ng_TopEdge         =    offy + 153;
  187.     ng.ng_Width           =    80;
  188.     ng.ng_Height          =    14;
  189.     ng.ng_GadgetText      =    (UBYTE *)"Sichern";
  190.     ng.ng_GadgetID        =    GD_ProgSave;
  191.     ng.ng_Flags           =    PLACETEXT_IN;
  192.  
  193.     g = CreateGadget( BUTTON_KIND, g, &ng, TAG_DONE );
  194.  
  195.     ProgGadgets[ 1 ] = g;
  196.  
  197.     ng.ng_LeftEdge        =    offx + 375;
  198.     ng.ng_GadgetText      =    (UBYTE *)"Abbruch";
  199.     ng.ng_GadgetID        =    GD_ProgAbbruch;
  200.  
  201.     g = CreateGadget( BUTTON_KIND, g, &ng, TAG_DONE );
  202.  
  203.     ProgGadgets[ 2 ] = g;
  204.  
  205.     ng.ng_LeftEdge        =    offx + 190;
  206.     ng.ng_GadgetText      =    (UBYTE *)"Benutzen";
  207.     ng.ng_GadgetID        =    GD_ProgBenutzen;
  208.  
  209.     g = CreateGadget( BUTTON_KIND, g, &ng, TAG_DONE );
  210.  
  211.     ProgGadgets[ 3 ] = g;
  212.  
  213.     ng.ng_LeftEdge        =    offx + 274;
  214.     ng.ng_TopEdge         =    offy + 19;
  215.     ng.ng_Width           =    181;
  216.     ng.ng_Height          =    128;
  217.     ng.ng_GadgetText      =    (UBYTE *)"Programmliste";
  218.     ng.ng_GadgetID        =    GD_ProgProgliste;
  219.     ng.ng_Flags           =    PLACETEXT_ABOVE;
  220.  
  221.     g = CreateGadget( LISTVIEW_KIND, g, &ng, GTLV_Labels, &PrgList, GTLV_ShowSelected, NULL, TAG_DONE );
  222.  
  223.     ProgGadgets[ 4 ] = g;
  224.  
  225.     ng.ng_LeftEdge        =    offx + 190;
  226.     ng.ng_Width           =    80;
  227.     ng.ng_Height          =    14;
  228.     ng.ng_GadgetText      =    (UBYTE *)"Neu";
  229.     ng.ng_GadgetID        =    GD_ProgNeu;
  230.     ng.ng_Flags           =    PLACETEXT_IN;
  231.  
  232.     g = CreateGadget( BUTTON_KIND, g, &ng, TAG_DONE );
  233.  
  234.     ProgGadgets[ 5 ] = g;
  235.  
  236.     ng.ng_TopEdge         =    offy + 36;
  237.     ng.ng_GadgetText      =    NULL;
  238.     ng.ng_GadgetID        =    GD_ProgEditMode;
  239.     ng.ng_Flags           =    0;
  240.  
  241.     g = CreateGadget( CYCLE_KIND, g, &ng, GTCY_Labels, &ProgEditModeLabels[0], TAG_DONE );
  242.  
  243.     ProgGadgets[ 6 ] = g;
  244.  
  245.     ng.ng_LeftEdge        =    offx + 193;
  246.     ng.ng_TopEdge         =    offy + 57;
  247.     ng.ng_GadgetID        =    GD_ProgEditNum;
  248.     ng.ng_Flags           =    PLACETEXT_RIGHT;
  249.  
  250.     g = CreateGadget( MX_KIND, g, &ng, GTMX_Labels, &ProgEditNumLabels[0], TAG_DONE );
  251.  
  252.     ProgGadgets[ 7 ] = g;
  253.  
  254.     if ( ! g )
  255.         return( 2L );
  256.  
  257.     if ( ! ( ProgWnd = OpenWindowTags( NULL,
  258.                     WA_Left,          ProgLeft,
  259.                     WA_Top,           ProgTop,
  260.                     WA_Width,         ProgWidth,
  261.                     WA_Height,        ProgHeight + offy,
  262.                     WA_IDCMP,         LISTVIEWIDCMP|BUTTONIDCMP|CYCLEIDCMP|MXIDCMP|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW,
  263.                     WA_Flags,         WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE,
  264.                     WA_Gadgets,       ProgGList,
  265.                     WA_Title,         ProgWdt,
  266.                     WA_PubScreen,     Scr,
  267.                     TAG_DONE )))
  268.         return( 4L );
  269.  
  270.     GT_RefreshWindow( ProgWnd, NULL );
  271.  
  272.     return( 0L );
  273. }
  274.  
  275. void CloseProgWindow( void )
  276. {
  277.     if ( ProgWnd        )
  278.         {
  279.         CloseWindow( ProgWnd );
  280.         ProgWnd = NULL;
  281.         }
  282.  
  283.     if ( ProgGList      )
  284.         {
  285.         FreeGadgets( ProgGList );
  286.         ProgGList = NULL;
  287.         }
  288.  
  289.     if ( VisualInfo )
  290.         {
  291.         FreeVisualInfo( VisualInfo );
  292.         VisualInfo = NULL;
  293.         }
  294.  
  295.     if ( Scr )
  296.         {
  297.         UnlockPubScreen( NULL, Scr );
  298.         }
  299. }
  300.  
  301. void ProgList( void )
  302.     {
  303.     ULONG  GClass;
  304.     USHORT GCode;
  305.     struct Gadget *GList = 0l;
  306.     struct IntuiMessage  *msg;
  307.     int Exit = 0;
  308.     int i;
  309.     BYTE a;
  310.  
  311.     InitLists();
  312.     if (OpenProgWindow()==0)
  313.         {
  314.         while( !Exit )
  315.             {
  316.             Wait( 1<<ProgWnd->UserPort->mp_SigBit );
  317.             while ( (!Exit) && (msg = (struct IntuiMessage *) GT_GetIMsg( ProgWnd->UserPort ) ))
  318.                 {
  319.                 GClass  = msg->Class;
  320.                 GCode   = msg->Code;
  321.                 if (GClass & (GADGETDOWN | GADGETUP | MOUSEMOVE) )
  322.                     GList   = (struct Gadget *) msg->IAddress;
  323.             GT_ReplyIMsg(msg);
  324.  
  325.                 switch (GClass)
  326.                     {
  327.                     case IDCMP_CLOSEWINDOW:
  328.                         ExitLists(0);
  329.                         CloseProgWindow();
  330.                         Exit = 1;
  331.                         break;
  332.                     case IDCMP_GADGETUP:
  333.                         switch (GList->GadgetID)
  334.                             {
  335.                             case GD_ProgTitelliste:
  336.                                 if (ProgLen<100)
  337.                                     {
  338.                                     GT_SetGadgetAttrs(ProgGadgets[GD_ProgProgliste], ProgWnd, 0, GTLV_Labels, ~0, TAG_DONE);
  339.                                     TempProg[ProgLen][ProgNr] = GCode + 1;
  340.                                     TempProg[ProgLen+1][ProgNr] = 0;
  341.                                     MakePrgList( ProgNr );
  342.                                     GT_SetGadgetAttrs(ProgGadgets[GD_ProgProgliste], ProgWnd, 0, GTLV_Labels, &PrgList, TAG_DONE);
  343.                                     };
  344.                                 break;
  345.                             case GD_ProgSave      :
  346.                                 ExitLists(2);
  347.                                 CloseProgWindow();
  348.                                 Exit = 1;
  349.                                 break;
  350.                             case GD_ProgAbbruch   :
  351.                                 ExitLists(0);
  352.                                 CloseProgWindow();
  353.                                 Exit = 1;
  354.                                 break;
  355.                             case GD_ProgBenutzen  :
  356.                                 ExitLists(1);
  357.                                 CloseProgWindow();
  358.                                 Exit = 1;
  359.                                 break;
  360.                             case GD_ProgProgliste :
  361.                                 GT_SetGadgetAttrs(ProgGadgets[GD_ProgProgliste], ProgWnd, 0, GTLV_Labels, ~0, TAG_DONE);
  362.                                 switch (ProgEditMode)
  363.                                     {
  364.                                     case 0: i = GCode;
  365.                                             while( TempProg[i][ProgNr] )
  366.                                                 {
  367.                                                 TempProg[i][ProgNr] = TempProg[i+1][ProgNr];
  368.                                                 i++;
  369.                                                 };
  370.                                             break;
  371.                                     case 1: if (GCode>0)
  372.                                                 {
  373.                                                 a = TempProg[GCode][ProgNr];
  374.                                                 TempProg[GCode][ProgNr] = TempProg[GCode-1][ProgNr];
  375.                                                 TempProg[GCode-1][ProgNr] = a;
  376.                                                 }
  377.                                             break;
  378.                                     case 2: if (GCode<ProgLen-1)
  379.                                                 {
  380.                                                 a = TempProg[GCode][ProgNr];
  381.                                                 TempProg[GCode][ProgNr] = TempProg[GCode+1][ProgNr];
  382.                                                 TempProg[GCode+1][ProgNr] = a;
  383.                                                 }
  384.                                             break;
  385.                                     case 3: a = TempProg[GCode][ProgNr];
  386.                                             i = GCode;
  387.                                             while (i>0)
  388.                                                 {
  389.                                                 TempProg[i][ProgNr] = TempProg[i-1][ProgNr];
  390.                                                 i--;
  391.                                                 }
  392.                                             TempProg[0][ProgNr] = a;
  393.                                             break;
  394.                                     case 4: a = TempProg[GCode][ProgNr];
  395.                                             i = GCode;
  396.                                             while( TempProg[i+1][ProgNr] )
  397.                                                 {
  398.                                                 TempProg[i][ProgNr] = TempProg[i+1][ProgNr];
  399.                                                 i++;
  400.                                                 };
  401.                                             TempProg[i][ProgNr] = a;
  402.                                             break;
  403.                                     }
  404.                                 MakePrgList( ProgNr );
  405.                                 GT_SetGadgetAttrs(ProgGadgets[GD_ProgProgliste], ProgWnd, 0, GTLV_Labels, &PrgList, TAG_DONE);
  406.                                 break;
  407.                             case GD_ProgNeu       :
  408.                                 GT_SetGadgetAttrs(ProgGadgets[GD_ProgProgliste], ProgWnd, 0, GTLV_Labels, ~0, TAG_DONE);
  409.                                 TempProg[0][ProgNr] = 0;
  410.                                 MakePrgList( ProgNr );
  411.                                 GT_SetGadgetAttrs(ProgGadgets[GD_ProgProgliste], ProgWnd, 0, GTLV_Labels, &PrgList, TAG_DONE);
  412.                                 break;
  413.                             case GD_ProgEditMode  :
  414.                                 ProgEditMode = GCode;
  415.                                 break;
  416.                             };
  417.                         break;
  418.                     case IDCMP_GADGETDOWN:
  419.                         switch (GList->GadgetID)
  420.                             {
  421.                             case GD_ProgEditNum   :
  422.                                 GT_SetGadgetAttrs(ProgGadgets[GD_ProgProgliste], ProgWnd, 0, GTLV_Labels, ~0, TAG_DONE);
  423.                                 MakePrgList( GCode );
  424.                                 GT_SetGadgetAttrs(ProgGadgets[GD_ProgProgliste], ProgWnd, 0, GTLV_Labels, &PrgList, TAG_DONE);
  425.                                 break;
  426.                             };
  427.                         break;
  428.                     };
  429.                 };
  430.             };
  431.         }
  432.     if (!Exit)
  433.         {
  434.         CloseProgWindow();
  435.         ExitLists(0);
  436.         };
  437.     }
  438.